/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package contatos.presenter;

import contatos.collection.Contatos;
import contatos.model.Contato;
import contatos.patterns.chainofresponsbility.EShandler;
import contatos.patterns.chainofresponsbility.RJHandler;
import contatos.patterns.chainofresponsbility.SPhandler;
import contatos.patterns.chainofresponsbility.TelefoneProcessor;
import contatos.patterns.state.ContatoState;
import contatos.view.ManterContatoView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author felipe
 */
public class ManterContatoPresenter {

    Contatos contatos;
    ManterContatoView view;
    TelefoneProcessor telefoneProcessor;
    ContatoState state;

    public ManterContatoPresenter() {
        try {
            contatos = Contatos.getInstancia();
            view = new ManterContatoView();

            //tratador de uf e operadora
            //uso do padrão chain of responsibility
            telefoneProcessor = new TelefoneProcessor();
            telefoneProcessor.addTelefoneHandler(new EShandler());
            telefoneProcessor.addTelefoneHandler(new RJHandler());
            telefoneProcessor.addTelefoneHandler(new SPhandler());

            //listener do editar
            view.getBtnEditar().addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    alterar();
                }

            });

            //listerner de salvar
            this.view.getBtnSalvar().addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    incluir();
                }

            });

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(view, ex.getMessage());
        }
    }

    public ManterContatoView getView() {
        return this.view;
    }

    public void setView(ManterContatoView view) {
        this.view = view;
    }

    public void setState(ContatoState state) {
        this.state = state;
    }

    public void incluir() {
        state.incluir();
    }

    public void visualizar() {
        state.visualizar();
    }

    public void alterar() {
        state.alterar();
    }

    public void identificaUfOperadora(String telefone) {
        //removendo os caracteres especiais
        telefone = telefone.replace("(", "").replace(")", "").trim();

        //chama a cadeia para identificar a UF e OPERADORA
        Contato p = new Contato("", telefone, "", "");
        telefoneProcessor.handleRequest(p);

        //se não foi possível identificar a operadora não sobrescreve o campo
        if (!p.getUf().equals("")) {
            view.getTxtUF().setText(p.getUf());
        }
        if (!p.getOperadora().equals("")) {
            view.getTxtOperadora().setText(p.getOperadora());
        }

    }
}
